0100 ;****************************** 0110 ;** ** 0120 ;** SUPERCARTRIDGE DOS ** 0130 ;** BY ROBERT OPITZ ** 0140 ;** 4/10/85 ** 0150 ;** ** 0190 ;****************************** 0200 ; 0210 ;O.S. EQUATES 0220 ; 0230 ICBAL = $0344 0240 ICBAH = $0345 0250 ; 0260 ;DOS EQUATES 0270 ; 0280 DUPFLG = $159D 0290 OPT = $159E 0300 SFLOAD = $15A4 0310 MEMFLG = $179E 0320 RRDUP = $1801 0330 DUPSYS = $182F 0340 CLOSX = $19AA 0350 CLOS20 = $19B4 0360 DOS = $2075 0370 ; 0380 ;PROGRAM EQUATES 0390 ; 0400 MSAV = $1D00 0430 SAVEDUP = $A000 0440 LOW = $D4 0450 HIGH = $D6 0460 CART.ON = $D500 0470 CART.OFF = $D5FF 0480 ; 0490 ; DOS PATCHES 0500 *= $157A 0510 ; 0520 JMP DUPINIT 0530 ; 0540 *= $1746 0550 ; 0560 SETSWT 0570 STA CART.OFF ;DISABLE CART 0580 LDA #MSAV&255 ;SET UP 0590 STA LOW ;INDIRECT 0600 LDA #SAVEDUP&255 ;POINTERS 0610 STA HIGH 0620 LDA #MSAV/256 0630 STA LOW+1 0640 LDA #SAVEDUP/256 0650 STA HIGH+1 0660 LDX #17 ;SWITCH 0693 ; 0695 ; MEMORY SWITCH ROUTINE 0697 ; 0700 SWITCH 0710 LDY #$00 0715 RESWT 0720 LDA (LOW),Y ;PUT LOW BYTE 0730 PHA ;ON STACK 0740 LDA (HIGH),Y ;SWITCH 1ST BYTE 0750 STA (LOW),Y 0760 PLA ;LOW BYTE OFF 0770 STA (HIGH),Y ;AND STORE IT 0780 INY 0790 BNE RESWT ;NEXT BYTE 0800 INC HIGH+1 0810 INC LOW+1 0820 DEX 0830 BNE RESWT ;NEXT PAGE 0835 STA CART.ON ;ENABLE CARTRIDGE 0840 RTS 0850 ; 0860 *= $17B6 0870 ; 0880 BEQ RRDUP 0890 GOOD JSR SETSWT ;DO MEM.SAV 0900 DEC MEMFLG ;SHOW MEM SAVED 0910 BMI RRDUP ;ALWAYS 0920 ; 0930 ; COLDSTART ROUTINE 0940 ; 0950 DUPINIT 0960 JSR CLOSX ;CLOSE IOCB 0970 LDA #$FF ;CONDITION DOS 0980 STA OPT ;FLAGS TO LOAD, 0990 STA DUPFLG ;NOT RUN DUP.SYS 1000 LDX #$10 ;USE IOCB 1 1010 LDA #DUPSYS&255 1020 STA ICBAL,X 1030 LDA #DUPSYS/256 1040 STA ICBAH,X 1050 JSR SFLOAD ;LOAD DUP.SYS 1060 JSR SETSWT ;AND MOVE IT 1180 LDA #$00 ;SHOW DUP NOT 1190 STA DUPFLG ;IN MEMORY 1200 RTS 1210 ; 1220 *= $1813 1230 ; 1240 SEC ;SKIP THIS 1250 BCS CONT ;SECTION 1260 ; 1270 *= $183A 1280 ; 1290 CONT DEC DUPFLG ;SHOW DUP IN MEM 1300 JMP DOS ;AND RUN IT 1310 ; 1320 ; MEMSVQ TELLS DOS IF MEM.SAV 1330 ; IS ACTIVE (Y=1) 1340 ; 1350 *= $1873 1360 MEMSVQ JSR CLOS20 ;CLOSE IOCB 1370 RTS ;RETURN Y=1 1380 ; 1390 ; RESTORE SAVED MEMORY 1400 ; 1410 *= $193F 1420 ; 1430 LDMEM1 1440 JSR SETSWT 1450 RTS 1460 ; 1470 ; CHANGE DOS MENU TITLE BAR 1480 ; TO SUPERCARTRIDGE VERSION 1490 ; 1500 *= $1F32 1510 ; 1520 .BYTE "SUP" 1530 ; 1540 .END